package main

import "fmt"

func main() {
	var i interface{} = 10
	//另一种断言，上和一个例子中的写法几乎一样。唯一的区别是用两个变量来接收返回值。
	t1, ok := i.(int)
	fmt.Println(t1, ok) //10,true 。断言成功

	t2, ok := i.(string) //断言失败，不会报错。t2得到string的零值""。ok为false
	fmt.Println(t2, ok)

	t3, ok := i.(float64) //断言失败，不会报错。t3得到float的零值0。ok为false
	fmt.Println(t3, ok)

	var k interface{}         //nil
	t4, ok := k.(interface{}) //nil 不属于任何类型
	fmt.Println(t4, ok)       //nil false

	k = 10
	t5, ok := k.(interface{}) //除了零值外，都属于interface{} 类型
	fmt.Println(t5, ok)       //10 true

}
